1130. Infix Expression

Direct Link

#coding: utf-8 
 
# 中序遍历 
 
def inorder_traverse(node): 
    global ans 
    if node == -1: return 
    lchild = node_dict[node[1]] if node[1] in node_dict else -1 
    rchild = node_dict[node[2]] if node[2] in node_dict else -1 
    if lchild == -1 and rchild == -1: 
        ans += node[0] 
    else: 
        ans += '(' 
        inorder_traverse(lchild) 
        ans += node[0] 
        inorder_traverse(rchild) 
        ans += ')' 
 
n = int(raw_input()) 
tot = n*(n+1) / 2 
node_dict = {} 
 
for i in xrange(n): 
    data, left, right = raw_input().split() 
    left, right = int(left), int(right) 
    if left != -1: tot -= left 
    if right != -1: tot -= right 
    node_dict[i+1] = (data, left, right) 
 
root_id, ans = tot, '' 
inorder_traverse(node_dict[root_id]) 
if ans.startswith('('):
    print ans[1:-1]
else:
    print ans